package com.bosssoft.goods.dao;

import com.bosssoft.goods.domain.vo.CategoryListVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 商品分类服务接口类
 * @author Fang_Sir
 * @date 2021-04-12
 */
@Repository
public interface GoodsCategoryDao {

    /**
     * 从根分类开始获取商品分类列表
     * @return {@link CategoryListVO}列表
     */
    List<CategoryListVO> getCategoryListFromRoot();

    /**
     * 添加商品根分类
     * @param name 商品分类名称
     * @param uid 创建用户编号
     * @return 返回影响行数
     */
    int addCategoryRoot(@Param("name") String name,@Param("uid") int uid);

    /**
     * 添加商品二级（功能）分类
     * @param pid 父分类编号
     * @param name 商品分类名称
     * @param uid 创建用户编号
     * @return 返回影响行数
     */
    int addCategoryFunction(@Param("pid")int pid, @Param("name") String name,@Param("uid") int uid);

    /**
     * 添加商品三级（类型）分类
     * @param pid 父分类编号
     * @param name 商品分类名称
     * @param uid 创建用户编号
     * @return 返回影响行数
     */
    int addCategoryType(@Param("pid")int pid, @Param("name") String name,@Param("uid") int uid);

    /**
     * 添加商品三级分类与品牌
     * @param pid 父分类编号
     * @param brand 品牌编号
     * @param uid 创建用户编号
     * @return 返回影响行数
     */
    int addCategoryBrand(@Param("pid")int pid, @Param("brand") int brand,@Param("uid") int uid);

    /**
     * 获取根分类名称是否存在
     * @param name 分类名称
     * @return 返回
     */
    int isExistCategoryRoot(@Param("name")String name);

    /**
     * 获取二级分类名称是否存在
     * @param name 分类名称
     * @return 返回
     */
    int isExistCategoryFunction(@Param("name")String name);

    /**
     * 获取三级分类名称是否存在
     * @param name 分类名称
     * @return 返回
     */
    int isExistCategoryType(@Param("name")String name);

    /**
     * 获取根分类名称是否存在
     * @param id 分类编号
     * @return 返回
     */
    int isExistCategoryRootById(@Param("id")int id);

    /**
     * 获取二级分类名称是否存在
     * @param id 分类编号
     * @return 返回
     */
    int isExistCategoryFunctionById(@Param("id")int id);

    /**
     * 获取三级分类名称是否存在
     * @param id 分类编号
     * @return 返回
     */
    int isExistCategoryTypeById(@Param("id")int id);

    /**
     * 更改商品根分类名称
     * @param id 分类编号
     * @param name 商品分类名称
     * @return 返回影响行数
     */
    int editCategoryRoot(@Param("id")int id,@Param("name") String name);

    /**
     * 更改商品二级（功能）分类名称
     * @param id 分类编号
     * @param name 商品分类名称
     * @return 返回影响行数
     */
    int editCategoryFunction(@Param("id")int id,@Param("name") String name);

    /**
     * 更改商品三级（类型）分类名称
     * @param id 分类编号
     * @param name 商品分类名称
     * @return 返回影响行数
     */
    int editCategoryType(@Param("id")int id,@Param("name") String name);

    /**
     * 删除根分类
     * @param id 分类编号
     * @return 返回删除行数
     */
    int delCategoryRoot(@Param("id") int id);

    /**
     * 删除二级分类
     * @param id 分类编号
     * @return 返回数据更改行数
     */
    int delCategoryFunction(@Param("id") int id);

    /**
     * 删除三级分类
     * @param id 分类编号
     * @return 返回更改行数
     */
    int delCategoryType(@Param("id") int id);
}
